package com.liu.gateway.gateway.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;


/**
 * 调用请求返回异常时统一处理 过滤器
 */
@Component
@Slf4j
public class ZuulExceptionUnifiedFilter extends ZuulFilter {

    /**
     过虑器的类型
     pre：请求在被路由之前执行

     routing：在路由请求时调用

     post：在routing和errror过滤器之后调用

     error：处理请求时发生错误调用

     */
    @Override
    public String filterType() {
        return FilterConstants.ERROR_TYPE;
    }

    /**
     * 过虑器序号，越小越被优先执行
     */
    @Override
    public int filterOrder() {
        return -2;
    }

    /**
     * 返回true表示要执行此过虑器
     * @return
     */
    @Override
    public boolean shouldFilter() {
        RequestContext ctx = RequestContext.getCurrentContext();
        //拦截所有的请求
        return  true;
//                ctx.getRequest().getRequestURI().contains("/oauth/token");
    }

    /**
     *过虑器的内容 拦截所有的异常进行统一处理
     * @return
     */
    @Override
    public Object run() {
        //全局异常统一处理处理
        RequestContext ctx = RequestContext.getCurrentContext();
      // 留着以后可能会处理，可以用在全局异常日志记录，全局异常统计等等
        return null;
    }
}
